package apace.commons.lang;
import java.util.Map;

import org.apache.commons.lang3.ArrayUtils;


public class ArrayUtilsTest {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {

		// java提供数组复制
		int [] srcArr = new int[] {1,2,3};
		int [] desArr = new int[] {5,6};
		System.arraycopy(srcArr, 1, desArr, 0, 2);
		
		for (int i = 0; i < desArr.length; i++) {
			System.out.println("java提供desArr[" + i +"] = " + desArr[i]);
		}
		System.out.println("-------------------华丽的分割线-------------------");
		// 创建空数组
		String[] strArray = ArrayUtils.EMPTY_STRING_ARRAY;
		
		// 单个顺序添加元素
		strArray = ArrayUtils.add(strArray, "str1");
		strArray = ArrayUtils.add(strArray, "str2");
		strArray = ArrayUtils.add(strArray, "str3");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("strArray[" + i +"] = " + strArray[i]);
		}
		System.out.println("-------------------华丽的分割线-------------------");
		
		// 单个指定顺序添加元素
		strArray = ArrayUtils.add(strArray, 0, "str0");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("strArray[" + i +"] = " + strArray[i]);
		}
		System.out.println("-------------------华丽的分割线-------------------");
		
		// 批量添加元素
		strArray = ArrayUtils.addAll(strArray, "str4", "str5");
		strArray = ArrayUtils.addAll(strArray, new String[] {"str6","str7"});
		
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("strArray[" + i +"] = " + strArray[i]);
		}
		
		System.out.println("-------------------华丽的分割线-------------------");
		
		// 克隆数组
		String[] cloneArray = ArrayUtils.EMPTY_STRING_ARRAY;
		cloneArray = ArrayUtils.clone(strArray);
		
		// 判断2个数组长度是否相同、数组内容是否相同
		if (ArrayUtils.isEquals(strArray, cloneArray) && ArrayUtils.isSameLength(strArray, cloneArray)) {
			System.out.println("2个数组相同");
		}
		for (int i = 0; i < cloneArray.length; i++) {
			System.out.println("cloneArray[" + i +"] = " + cloneArray[i]);
		}
		// 判断指定的元素是否存在
		if (!ArrayUtils.contains(cloneArray, "str8")) {
			System.out.println("cloneArray数组不存在str8");
		}
		// 指定位置处检索
		if (ArrayUtils.indexOf(cloneArray, "str8", 4) < 0) {
			System.out.println("cloneArray数组不存在str8");
		}
		// 指定位置处检索,位置相当于数组下标
		if (ArrayUtils.indexOf(cloneArray, "str2", 3) < 0) {
			System.out.println("cloneArray数组不存在str2");
		}
		// 判空
		if (ArrayUtils.isEmpty(cloneArray)) {
			System.out.println("cloneArray数组不为空！");
		}
		System.out.println("-------------------华丽的分割线-------------------");
		
		// 查找指定的值如果有重复则返回最后一个的位置,也可以指定开始查询位置
		strArray = ArrayUtils.add(strArray, "str2");
		int pos = ArrayUtils.lastIndexOf(strArray, "str2");
		System.out.println("查询str2的位置为" + pos);
		
		// 将null变成空数组，防止异常
		String [] nullArr = null;
		System.out.println("长度为：" + ArrayUtils.nullToEmpty(nullArr).length);
		
		// 根据索引删除、根据元素删除(String类型无此方法)
		int [] intArray = new int [] {11,22,33,44,55,66};
		intArray = ArrayUtils.removeElement(ArrayUtils.remove(intArray, 0), 44);
		System.out.println("-------------------华丽的分割线-------------------");
		for (int i = 0; i < intArray.length; i++) {
			System.out.println("intArray[" + i +"] = " + intArray[i]);
		}
		// 倒序
		ArrayUtils.reverse(intArray);
		for (int i = 0; i < intArray.length; i++) {
			System.out.println("倒序后intArray[" + i +"] = " + intArray[i]);
		}
		// 截取数组[)
		int[] subArray = ArrayUtils.subarray(intArray, 1, 2);
		for (int i = 0; i < subArray.length; i++) {
			System.out.println("截取的子数组subArray[" + i +"] = " + subArray[i]);
		}
		System.out.println("-------------------华丽的分割线-------------------");
		// toArray 可以将参数批量加入数组
		Integer [] toArray = ArrayUtils.toArray(111,222,333);
		for (int i = 0; i < toArray.length; i++) {
			System.out.println("将参数变成数组toArray[" + i +"] = " + toArray[i]);
		}
		System.out.println("-------------------华丽的分割线-------------------");
		// 2维数组或者map对象变map对象
		Map<Object,Object> toMap  = ArrayUtils.toMap(new String[][] {
			{"RED", "#FF0000"},
	        {"GREEN", "#00FF00"},
	        {"BLUE", "#0000FF"}});
		for (Map.Entry<Object,Object> me : toMap.entrySet()) {
			System.out.println("map对象：key = " + me.getKey() + " value = " + me.getValue());
		}
		System.out.println("-------------------华丽的分割线-------------------");
		// 基本类型和包装类的互相转换
		Integer [] IntegerArr = ArrayUtils.toObject(new int [] {1,2,3});
		subArray = ArrayUtils.toPrimitive(IntegerArr);
		// 防止null
		subArray = ArrayUtils.toPrimitive(new Integer [1],44);
		
	}

}
